package com.qfedu.openplateform.user.controller;

import com.qfedu.openplateform.cache.service.CacheService;
import com.qfedu.openplateform.common.entity.BaseResultBean;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.servlet.http.HttpServletResponse;
import java.time.Instant;
import java.util.Date;

/**
 * @author lileijian
 * @create 2021-12-05 16:29
 */
@RestController
public class UserController {
    @Autowired
    private CacheService cacheService;
    /**
     *
     * 登录业务：
     *
     * 1.用户传递 用户名 ，密码 ，appkey 到后台
     *
     * 2.后台登录接口 接受 数据，校验用户名密码，对应的appkey
     *
     * 3.返回登录成功 ，并返回 token (令牌，字符串)
     *
     * @return
     */
    @RequestMapping("/login")
    public BaseResultBean login(String username, String password, String appkey, HttpServletResponse response) throws Exception {
        BaseResultBean baseResultBean = new BaseResultBean();


        //校验用户名密码
        if ("root".equals(username) && "123456".equals(password)){
            //用户名密码校验通过

            //当前时间
            Instant now = Instant.now();
            String jwt = Jwts.builder()
                    .setSubject("root")//设置当前的用户是谁
                    .setIssuedAt(Date.from(now))//设置开始的有效期
                    .setExpiration(Date.from(now.minusSeconds(3600)))//设置过期时间我当前时间顺眼一小时
                    // 设置签名的算法和秘钥值
                    .signWith(SignatureAlgorithm.HS256,"meiyoumima".getBytes())
                    .compact();

            // token 还需要存入 后台管理数据库  及 redis
            cacheService.save2Redis("token-"+username,jwt,3600*1000);

            // token 存入请求头中
            //token 要返回前端  1.将token 已json 形式返回 2.经token 放到header 中
            response.addHeader("token", jwt);

            baseResultBean.setCode("1");
            baseResultBean.setMsg("success");
            return baseResultBean;
        }

        baseResultBean.setCode("0");
        baseResultBean.setMsg("错误");
        return baseResultBean;
    }
}
